﻿unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  arr : array [0..99] of TButton;
  a:integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i,g : integer;
begin
  g:=-1;
  for i := 0 to 899 do
  begin
    g:=g+1;
    arr[i] := TButton.Create(Form1);
    arr[i].Width := 30;
    arr[i].Height := 30;
    arr[i].Parent := Form1;
    if g mod 30=0 then
      g:=0;
    arr[i].top:=(i div 30)*30;
    arr[i].Left := 30*g;
    arr[i].onclick:=button2click;
  end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,j,s:integer;
begin
  for I := 0 to 899 do
  begin
    if (sender=arr[i]) then begin
      if a mod 2=0 then
        arr[i].Caption:='X'
      else
        arr[i].Caption:='O';
      arr[i].Enabled:=false;
      a:=a+1;
      while j<5 do
      if arr[i-j].Caption='X' then
      begin
        if i-j mod 30<>29 then
        begin
          j:=j+1;
          s:=s+1;
        end
        else
        j:=5;
        if s=5 then
          application.MessageBox('Победили крестики','Конец игры')
      end;
      j:=1;
      while j<5 do
      if arr[i+j].Caption='X' then
      begin
        if i+j mod 30<>0 then
        begin
        j:=j+1;
        s:=s+1;
        end
        else
        j:=5;
        if s=5 then
          application.MessageBox('Победили крестики','Конец игры')
      end;
      s:=0;
      j:=0;
    end;
      while j<5 do
      if arr[i-j].Caption='O' then
      begin
        if i-j mod 30<>29 then
        begin
          j:=j+1;
          s:=s+1;
        end
        else
        j:=5;
        if s=5 then
          application.MessageBox('Победили нолики','Конец игры');
      end;
      j:=1;
      while j<5 do
      if arr[i+j].Caption='O' then
      begin
        if i+j mod 30<>0 then
        begin
          j:=j+1;
          s:=s+1;
        end
        else
        j:=5;
        if s=5 then
          application.MessageBox('Победили нолики','Конец игры')
      end;
      s:=0;
      j:=0;
      while j<130 do
      if arr[i-j].Caption='X' then
      begin
        if i-j<0 then
        begin
        j:=j+30;
        s:=s+1;
        end
        else
        j:=150;
        if s=5 then
          application.MessageBox('Победили крестики','Конец игры')
      end;
      j:=30;
      while j<130 do
      if arr[i+j].Caption='X' then
      begin
        if i+j>899 then
        begin
          j:=j+30;
          s:=s+1;
        end
        else
        j:=150;
        if s=5 then
          application.MessageBox('Победили крестики','Конец игры')
      end;
    end;
    s:=0;
    j:=0;
      while j<130 do
      if arr[i-j].Caption='O' then
      begin
        if i-j<0 then
        begin
        j:=j+30;
        s:=s+1;
        end
        else j:=150;
        if s=5 then
          application.MessageBox('Победили нолики','Конец игры');
      end;
      j:=30;
      while j<130 do
      if arr[i+j].Caption='O' then
      begin
        if i+j>899 then
        begin
        j:=j+30;
        s:=s+1;
        end
        else
        j:=150;
        if s=5 then
          application.MessageBox('Победили нолики','Конец игры')
      end;
      s:=0;
      j:=0;
      while j<130 do
      if arr[i-j].Caption='X' then
      begin
        if (i-j<0) or (i-j mod 30<>29) then
        begin
        j:=j+31;
        s:=s+1;
        end
        else
        j:=150;
        if s=5 then
          application.MessageBox('Победили крестики','Конец игры')
      end;
      j:=31;
      if arr[i+j].Caption='X' then
      begin
        if (i+j>899) or (i+j mod 30<>0) then
        begin
        j:=j+31;
        s:=s+1;
        end
        else
        j:=150;
        if s=5 then
          application.MessageBox('Победили крестики','Конец игры')
      end;
      s:=0;
      j:=0;
      while j<130 do
      if arr[i-j].Caption='O' then
      begin
        if (i-j<0) or (i-j mod 30<>29) then
        begin
        j:=j+31;
        s:=s+1;
        end
        else
        j:=150;
        if s=5 then
          application.MessageBox('Победили нолики','Конец игры');
      end;
      j:=31;
      while j<130 do
      if arr[i+j].Caption='O' then
      begin
        if (i-j<0) or (i-j mod 30<>29) then
        begin
        j:=j+31;
        s:=s+1;
        end
        else
        j:=150;
        if s=5 then
          application.MessageBox('Победили нолики','Конец игры')
        end;
        s:=0;
        j:=0;
        while j<130 do
        if arr[i-j].Caption='X' then
        begin
          if (i-j<0) or (i-j mod 30<>29) then
          begin
          j:=j+29;
          s:=s+1;
          end
          else
          j:=150;
          if s=5 then
            application.MessageBox('Победили крестики','Конец игры')
        end;
        j:=29;
        while j<130 do
        if arr[i+j].Caption='X' then
        begin
          if (i-j<0) or (i-j mod 30<>29) then
          begin
          j:=j+29;
          s:=s+1;
          end
          else
          j:=150;
          if s=5 then
            application.MessageBox('Победили крестики','Конец игры')
        end;
        s:=0;
        j:=0;
        while j<130 do
        if arr[i-j].Caption='O' then
        begin
          if (i-j<0) or (i-j mod 30<>29) then
          begin
          j:=j+29;
          s:=s+1;
          end
          else
          j:=150;
          if s=5 then
            application.MessageBox('Победили нолики','Конец игры');
        end;
        j:=29;
        while j<130 do
        if arr[i+j].Caption='O' then
        begin
          if (i-j<0) or (i-j mod 30<>29) then
          begin
          j:=j+29;
          s:=s+1;
          end
          else
          j:=150;
          if s=5 then
            application.MessageBox('Победили нолики','Конец игры');
        end;
end;
end.
